package com.example.tdam_2012_g3;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import entidades.InteraccionServidor;
import entidades.RegistroUsuarioHandler;

public class Activity_Nombre_Usuario extends Activity {

	private EditText nombre_usuario;
	private static final int DIALOGO_RESULTADO_REGISTRO_USUARIO_OK = 1;
	private static final int DIALOGO_RESULTADO_REGISTRO_USUARIO_FAIL = 2;
	private RegistroUsuarioHandler handlerRegistro;

	public void setHandlerRegistro(RegistroUsuarioHandler handlerRegistro) {
		this.handlerRegistro = handlerRegistro;
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity__nombre__usuario);
		nombre_usuario = (EditText) this.findViewById(R.id.txtNombreUss);
		Button registrar_nombre = (Button) this
				.findViewById(R.id.btnGuardarNombre);
		registrar_nombre.setOnClickListener(presionarBotonRegistrar);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity__nombre__usuario, menu);
		return true;
	}

	OnClickListener presionarBotonRegistrar = new OnClickListener() {

		public void onClick(View v) {
			String usuarioARegistrar = nombre_usuario.getText().toString();
			if (!usuarioARegistrar.equals("")) {
				threadRegistroUsuario hiloRegistrar = new threadRegistroUsuario();
				hiloRegistrar.setUsuario(usuarioARegistrar);
				hiloRegistrar.execute();
				removeDialog(DIALOGO_RESULTADO_REGISTRO_USUARIO_FAIL);
			} else {
				mostrarToast(getApplicationContext().getString(R.string.str_asociacion_fail_vacio));
			}

		}
	};

	protected Dialog onCreateDialog(int id) {
		Dialog dialogo = null;

		switch (id) {
		case DIALOGO_RESULTADO_REGISTRO_USUARIO_OK:
			dialogo = crearDialogoRegistroUsuarioOk();
			break;
		case DIALOGO_RESULTADO_REGISTRO_USUARIO_FAIL:
			dialogo = crearDialogoRegistroUsuarioFail();
			break;

		}

		return dialogo;
	}

	private Dialog crearDialogoRegistroUsuarioOk() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle(getApplicationContext().getString(	R.string.str_atencion));
		builder.setMessage(getApplicationContext().getString(R.string.str_dialogo_registrar_usuario_exito));
		builder.setPositiveButton("OK",	new android.content.DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int which) {
						dialog.cancel();
					}
				});

		return builder.create();
	}

	private Dialog crearDialogoRegistroUsuarioFail() {
		String mensajeDialogo = "";
		String codigo = handlerRegistro.getCode();
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		if (!codigo.equals("")) {

			switch (Integer.parseInt(codigo)) {
			case 5:
				mensajeDialogo = this.getApplicationContext().getString(R.string.str_dialogo_registrar_usuario_fail_repetido);
				break;
			case 13:
				mensajeDialogo = this.getApplicationContext().getString(R.string.str_registro_fail_code13);
				break;
			default : mensajeDialogo = this.getApplicationContext().getString(R.string.str_registro_fail_code_default)+codigo;
			break;
				
			}
		} else {
			mensajeDialogo = this.getApplicationContext().getString(R.string.str_dialogo_registrar_usuario_fail_gral);
		}

		builder.setTitle(getApplicationContext().getString(R.string.str_atencion));
		builder.setMessage(mensajeDialogo);
		builder.setPositiveButton("OK",
				new android.content.DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int which) {
						dialog.cancel();
					}
				});

		return builder.create();
	}

	/**
	 * Metodo que guarda en una preferenica el usuario que regisramos como
	 * nuestro al servidor
	 * 
	 * @param user
	 *            , el usuario a guardar
	 * @return un boolean que indica si se registreo o no
	 */
	public boolean guardarUsuario(String user) {
		SharedPreferences myPreference = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
		Editor editMyPreferences = myPreference.edit();
		editMyPreferences.putString("myUser", user);
		editMyPreferences.commit();
		return myPreference.contains("myUser");

	}

	/**
	 * Muestra un toast
	 * 
	 * @param mensaje
	 *            : texto a mostrar en el toast
	 * @return el toast a mostrar
	 */
	public Toast mostrarToast(String mensaje) {
		Toast toast = Toast.makeText(getApplicationContext(), mensaje,
				Toast.LENGTH_SHORT);
		return toast;
	}

	/**
	 * Subclase AsyncTask, creada para correr el proceso de registro de usuario
	 * en segundo plano se defininio una subclase para poder acceder a
	 * propeidades de la activity
	 */
	public class threadRegistroUsuario extends AsyncTask<Void, Integer, Void> {
		private String usuarioARegistrar;
		
		
		public threadRegistroUsuario(){
			
		}

		protected Void doInBackground(Void... params) {
			InteraccionServidor server = new InteraccionServidor();
			int dialogo;

			handlerRegistro = server.parserRegistrarUsuario(0, usuarioARegistrar, "", "");
			if (handlerRegistro.getType().equals("success")&& guardarUsuario(usuarioARegistrar)) {

				dialogo = DIALOGO_RESULTADO_REGISTRO_USUARIO_OK;

			} else {
				dialogo = DIALOGO_RESULTADO_REGISTRO_USUARIO_FAIL;
			}
            
			publishProgress(dialogo);
			return null;
		}

		protected void onProgressUpdate(Integer... values) {
			int dialogo = values[0].intValue();
		
			showDialog(dialogo);
			
        
		}

		public void setUsuario(String usr) {
			this.usuarioARegistrar = usr;
		}

	}
}
